package com.ytjj.qmyx.mall.service;

import com.ytjj.common.api.CommonResult;
import com.ytjj.common.model.UsersResponse;
import com.ytjj.qmyx.mall.model.Banners;
import com.ytjj.qmyx.mall.model.CouponRecords;
import com.ytjj.qmyx.mall.model.Product;
import com.ytjj.qmyx.mall.model.ProductActivityImg;
import com.ytjj.qmyx.mall.model.dto.AppNewLifeHallIndexGroupProductDto;
import com.ytjj.qmyx.mall.model.dto.AppNewLifeHallIndexOldForNewProductDto;
import com.ytjj.qmyx.mall.model.dto.OldForNewProductDto;
import com.ytjj.qmyx.mall.model.dto.RecordSubsidyDataDto;
import com.ytjj.qmyx.mall.model.response.*;
import com.ytjj.qmyx.users.model.UsersCouponDto;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 活动接口
 *
 *
 * @version 1.0
 *
 */
public interface ActivityService {

    /**
     * 获取秒杀栏目商品
     *
     * @return
     */
    //List<ActivityColumnResponse> getSeckillColumn();

    /**
     * 获取新用户活动商品列表
     *
     * @return
     */
    List<ProductResponse> getNewUserProductList();

    /**
     * 获取返现活动商品
     *
     * @return
     */
    List<ProductResponse> getReturnCashProductList();

    /**
     * 获取以旧换新栏目
     *
     * @return
     */
    List<ActivityColumnResponse> getOldForNewColumn();

    /**
     * 获取新品招募列表
     *
     * @return
     */
    List<ProductResponse> getNewProductList();

    /**
     * 获取活动商品信息
     *
     * @param productId 商品id
     * @param type      活动类型
     * @return
     */
    ProductResponse getActivityProductInfo(Integer productId, String type, String modular);

    /**
     * 查询活动商品信息
     * 包含下架
     *
     * @param productId
     * @param type
     * @return
     */
    ProductResponse getActivityProductInfoByProductId(Integer productId, String type);

    /**
     * 获取活动商品规格信息
     *
     * @param productId
     * @param productSpec
     * @return
     */
    ProductActivitySpecResponse getActivityProductSpecInfo(Integer productId, String productSpec);

    /**
     * 获取活动商品Id
     *
     * @return
     */
    ProductActivitySpecResponse getActivityProductSpecById(Integer productSpecId);

    /**
     * 积分产品页
     *
     * @param user
     * @return
     */
    ScorePageResponse getScoreProductList(UsersResponse user,Integer brandId);

    /**
     * 活动商品推荐
     *
     * @param activityType
     * @param productId
     * @return
     */
    List<ProductResponse> getActivityCorrelationPro(String activityType, Integer productId);

    /**
     * 商品出售后
     * @param activityId
     * @param activityType
     * @param productSum
     * @param productPrice
     * @param activityMax
     * @param userId
     */
    void sellAfter(Integer isDirectbuy, Integer activityId, Integer specId, String activityType, Integer productSum, BigDecimal productPrice, BigDecimal activityMax, Integer userId);

    /**
     * 活动
     *
     * @param productId
     * @return
     */
    List<ProductSpecResponse> getActivityProductSpecList(Integer productId);

    /**
     * 获取现金券列表
     * @return
     */
    List<ActivityColumnResponse> getCashCouponList();

    /**
     * 获取所有现金劵商品列表
     * @return
     */
    List<ProductResponse> getAllCashCouponList();

    /**
     * h5 积分商品列表
     * @param user
     * @return
     */
    H5ScorePageResponse getH5ScoreProductList(UsersResponse user,Integer brandId);

    void sellAfter(Integer isDirectbuy, Integer activityId, Integer productSpecId, String activityType, Integer productSum, BigDecimal productPrice, BigDecimal activityMax, Integer userId, String tokenUser,Integer isWalletPay);

    /**
     * 获取拍卖商品列表
     *
     * @return
     */
    // List<List<ProductActivityResponse>>  getAuctionProductList();


    /**
     * 获取活动导航列表
     *
     * @param type
     * @return
     */
    MaxNavResponse getActivityNavList(String type);

    /**
     * 获取banner列表
     *
     * @return
     */
    List<Banners> getActivityBannerList();

    /**
     * 优惠商品列表
     * @return
     */
    ActivityCashCouponResponse getCouponProductList(Integer userId);

    /**
     * 优惠商品列表(新版)
     * @return
     */
    ActivityCashCouponResponse getCouponProductNewList(Integer userId);

    /**
     * 所有优惠券列表
     * @return
     */
    ActivityCashCouponResponse getAllCouponList();

    List<ProductResponse> getCouponProductListById(Integer id,Integer pageNum,Integer pageSize);

    List<ProductResponse> getCouponListV1();

    /**
     * 查询优惠券列表
     * @return
     */
    List<ProductResponse> getCouponList();

    UserCouponResponse getUserCouponList(Integer type);

    /**
     * 领取优惠券
     * @param productId
     * @return
     */
    CouponRecords obtainCoupon(Integer productId);

    /**
     * 优惠前列表v2
     * @return
     */
    UserCouponResponse getCouponListV2();

    /*
     * 领取优惠券
     */
    UsersCouponDto receiveCoupon(Integer userId, Integer couponId);

    /*
     * 领取优惠券new
     */
    void receiveCouponNew(Integer userId, Integer couponId);


    /**
     * 获取补贴栏目列表
     * @return
     */
    Map<String,ActivityColumnResponse> getSubsidyList();

    /**
     * 秒杀排行
     *
     * @return
     * @param columnId
     */
    List<ProductResponse> getSeckillRank(Integer columnId);



    /**
     * 获取活动商品信息
     *
     * @param productId 商品id
     * @param type      活动类型
     * @return
     * @version 2.0
     */
    ProductResponse getActivityProductInfoV2(Integer productId, String type, UsersResponse usersResponse,String modular);

    /**
     * 获取购买公告
     * @return
     */
    List<FakeNoticeResponse> buyNotice();

    /**
     *
     * @param id
     * @return
     */
    List<ProductActivityImg> getRecommendImgById(Integer id);

    /**
     * 获取新秒杀购物列表
     *
     * @return
     */
    NewKillResponse getNewKillList();

    /**
     * 根据不同积分活动栏目id获取h5积分产品列表 h5
     * @return
     */
    H5ScorePageResponse getH5ScoreListByColumn(String type);

    /**
     * 根据不同积分活动栏目id获取app积分产品列表 app
     * @return
     */
    ScorePageResponse getScoreListByColumn(UsersResponse user, String type);

    /**
     * 根据价格获取相应商品列表
     * @return
     */
    List<ProductResponse> getProductsByActivityMax(BigDecimal activityMax);

    /**
     * 查询用户
     * @param type
     * @return
     */
    UserCouponResponse getUserCouponListV2(Integer type);

    /**
     * 用户中心商品
     * @return
     */
    UserCenterResponse getUserCenterData();

    /**
     * 根据不同积分活动栏目获取h5积分产品列表 h5, 不要返回全部和免费兑,新增一个精选栏目, 并且是把所有栏目的商品列表在一次性返回
     * @return
     * @param flag
     */
    H5ScorePageResponse getH5ScoreListByType(Integer flag);

    /**
     * 偏远地区
     * 根据不同积分活动栏目获取h5积分产品列表 h5, 不要返回全部和免费兑,新增一个精选栏目, 并且是把所有栏目的商品列表在一次性返回
     * @return
     * @param flag
     */
    H5ScorePageResponse getH5ScoreListByTypeForRemote(Integer flag);

    /**
     * 根据不同积分活动栏目获取h5积分产品列表 h5, 不要返回全部和免费兑,新增一个精选栏目, 并且是把所有栏目的商品列表在一次性返回
     * @return
     * @param flag
     */
    H5ScorePageResponse getH5ScoreListByTypeV2(Integer flag);

    /**
     * 根据不同积分活动栏目获取app积分产品列表 app, 不要返回全部和免费兑,新增一个精选栏目, 并且是把所有栏目的商品列表在一次性返回
     * @return
     */
    ScorePageResponse getScoreListByType(UsersResponse user);

    /**
     * @Description :兑换中心页
     * @param usersResponse
     */
    ChangeCenterResponse getChangeCenterData(UsersResponse usersResponse);

    List<ProductResponse> getLikeInRecharge();

    ScorePageResponse getScoreListByTypeV2(UsersResponse user, Integer flag);

    NewKillResponse getNineSecKillColumn();

    UserCouponResponse getCouponListV2ByPage(Integer pageNum, Integer pageSize);

    UserCouponResponseV2 getCouponListV3ByPage(Integer pageNum, Integer pageSize, Integer couponPrice);

    Map<String,Object> getWarmProducts();

    WarmProductResponse getWarmProductsV2(Integer hotProductId);

    OldForNewExtResponse queryOldForNewColumn(Integer productId);

    OldForNewExtResponse queryOldForNewColumnApp(Integer productId);

    List<OldForNewProductDto> queryOldForNewList(Integer columnId);

    List<ProductResponse> getProductsByBrandType(Integer pageNum, Integer pageSize, String activityType);

    List<ActivityProductResponse> getActivityList(Integer pageNum, Integer pageSize, String activityType, BigDecimal activityMax, String productName);

    List<ActivityProductResponse> getActivityListFixPrice(Integer pageNum, Integer pageSize, String activityType, BigDecimal activityMax, String productName);

    List<ActivityProductResponse> getActivityListByRange(Integer pageNum, Integer pageSize, String activityType, BigDecimal activityMaxStart,BigDecimal activityMaxEnd);

    OldForNewReceiveResponse getNotReceiveList(Integer pageNum,Integer pageSize);

    OldForNewReceiveResponse getNotReceiveListV2(Integer pageNum,Integer pageSize);

    OldForNewExtResponse getOldForNewProductsOfH5User(Integer flag, Integer columnId, BigDecimal activityMax);

    OldForNewExtResponse getOldForNewProductsOfAppUser();

    ActivityH5Response getActivityListH5();

    ActivityAppResponse getActivityListApp();

    NewYearGoodsResponse getNewYearGoods(Integer type);

    Map<String, Object> getReturnCouponSpecial(UsersResponse h5CurrentUser);

    UserCouponResponseV2 getCouponListV4ByPage(Integer pageNum, Integer pageSize);

    Map<String, Object>  signCoupon(UsersResponse h5CurrentUser);

    BrandScoreResponse getProductsByBrandId(Integer brandId);

    Map<String, Object> signCouponApp(UsersResponse h5CurrentUser);

    Map<String, Object> getBrandsAndUsersHeadImg();

    OldForNewExtResponse getOldForNewOrders();

    List<OldForNewProductDto> getProductsByBrandType(String type);

    Map<String, Object> getBrandList();

    Map<String, Object> getHotProductDownload(Integer productId);

    Map<String,Object> queryCashScoreColumnH5();

    List<ProductShortResponse> queryCashScoreListH5(Integer columnId,Integer pageSize,Integer pageNum,Integer flag,String consumerPower, Integer unionFlag);

    List<ProductResponse> getCashScoreProductList(Integer pageSize, Integer pageNum);

    List<OldForNewProductDto> queryOldForNewList(Integer columnId, Integer pageNum, Integer pageSize,Integer flag);

    List<OldForNewProductDto> queryOldForNewList(Integer columnId, Integer pageNum, Integer pageSize,Integer flag, BigDecimal activityMax);

    List<OldForNewProductDto> queryOldForNewList(Integer columnId, Integer pageNum, Integer pageSize,BigDecimal activityMin, BigDecimal activityMax,Integer sort);

    OldForNewReceiveResponse getNotReceiveListV3(Integer pageNum, Integer pageSize);

    /**
     *h5以旧换新首页
     * @return
     */
    OldForNewIndexResponse getOldForNewIndex(Integer flag);


    List<OldForNewProductDto> getList(Integer pageNum, Integer pageSize, Integer columnId);
    BigDecimal getSubsidyAmount();

    /**
     * 会员中心
     * @return
     */
    VipCenterResponse getVipCenterProduct();

    List<PayAfterUseResponse> getPayAfterUseList(Integer pageNum, Integer pageSize);
    /**
     * 获取用户补贴领取信息
     * @return
     */
    OldForNewExtResponse getUserSubsidyInfo();

    RecordSubsidyDataDto getUserSubsidyInfo(String recordSubsidyKey);


    /**
     * 查询所有的补贴商品
     * @param columnId
     * @return
     */
    List<AppNewLifeHallIndexOldForNewProductDto> getAllList(Integer pageNum, Integer pageSize, Integer columnId);

    List<AppNewLifeHallIndexGroupProductDto> getAllListByNew(Integer pageNum, Integer pageSize, Integer columnId);
    /**
     * 查询所有的积分兑换商品
     */
    List<ProductShortResponse> getAllCashScoreList(int limit);

    List<ProductShortResponse> getGroupWorkAll();

    List<Product> getProductByActivityType(String activityType, int limit);

    AppIndexTopResponse queryRandomProductByActivityTypeAndLimit(String activityType, int limit, Integer userId);

    List<ActivityProductResponse> getActivityList(Integer pageNum, Integer pageSize, String activityType, Integer columnId);

    String getColumnName(Integer columnId);

    /**
     * 根据Ip查询商品
     */
    List<ActivityProductResponse> getActivityListByArea(Integer pageNum, Integer pageSize, String activityType, Integer columnId);

    List<ActivityProductResponse> getActivityList(Integer pageNum, Integer pageSize, String activityType, Integer columnId, String platformData);

    /**
     * 获取首页专题商品
     * (专题活动入口展示的商品)
     */
    CommonResult getHomeSubjectProduct();

    BigDecimal queryH5TotalUsedScore();

    int newUserDeliveryAddress(NewExclusiveResponse newExclusiveResponse);

    ScorePageResponse getScoreListByTypeCopy(UsersResponse user);

    List<ActivityProductResponse> getActivityListByColumnIds(Integer pageNum, Integer pageSize, String activityType, String columnIds);

    List<ActivityProductResponse> getActivityListByColumnIds(Integer pageNum, Integer pageSize, String activityType, String columnIds, String platformData);

    CommonResult getColumn(String activityType, Integer isShow);

    List<ActivityProductResponse> queryActivityRankList(Integer specialId, List<Integer> ids, Integer pageNum, Integer pageSize);

    List<ActivityProductResponse> recommendProduct(Integer productId, Integer pageNum, Integer pageSize);
}
